/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloCandidato;
import com.ipartek.formacion.gestformwww.modelo.ModeloSMS;
import com.ipartek.formacion.gestformwww.modelo.beans.Candidato;
import com.ipartek.formacion.gestformwww.modelo.beans.PlantillaSMS;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Cris & Fran
 */
public class VisualizarEnviarSMSCandidatoAccion implements Accion {

     private AccionFactory factoria;
    private final String visualizarCandidatos = "listar-candidatos-accion";
    private final String visualizarconvocatorias = "visualizar-convocatoria-accion";

    /**
     * Ejecuta la accion de visualizar la página para enviar SMSs
     * @param servlet
     * @param request
     * @param response
     * @return
     */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        // Iniciamos las variables con las que vamos a trabajar
        ModeloCandidato modelo = (ModeloCandidato) servlet.getServletContext().getAttribute("ModeloCandidato");
        ModeloSMS modelosms = (ModeloSMS) servlet.getServletContext().getAttribute("ModeloSMS");
        HttpSession sesion = request.getSession();
        AccionRouter router = null;
        AccionServlet as=(AccionServlet) servlet;
        ArrayList<String> errores = new ArrayList<String>();
        ArrayList<Candidato> candidatos = new ArrayList<Candidato>();
        ArrayList<PlantillaSMS> plantillas = new ArrayList<PlantillaSMS>();
        // Comprobamos que hay un usuario logueado
        if (sesion.getAttribute("usuario") != null && request.getMethod().equalsIgnoreCase("POST")) {
            // Comprobamos que tenemos candidatos seleccionados
            if (request.getParameterValues("canId")!= null) {
                try {
                    // Recorremos la lista de IDs de candidato para añadirlos al array
                    for (String idStr : ((String[]) request.getParameterValues("canId"))) {
                        Candidato candidato = modelo.getCandidato(Integer.parseInt(idStr));
                        candidatos.add(candidato);
                    }
                } catch (GestorFormacionExcepcion ex) {
                    sesion.setAttribute("excepciones", ex.getMessage());
                    Logger.getLogger(VisualizarEnviarSMSAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (NumberFormatException ex) {
                    candidatos.clear();
                }
            
                try {
                    // Cargamos las plantillas de los SMS
                    plantillas = modelosms.listarPlantillasSMS();
                } catch (GestorFormacionExcepcion ex) {
                    sesion.setAttribute("excepciones", ex.getMessage());
                    Logger.getLogger(VisualizarEnviarSMSAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
                request.setAttribute("listaCandidatos", candidatos);
                request.setAttribute("listaplantillas", plantillas);
                request.setAttribute("contenido", "visualizar-enviar-sms-candidato"); //Poner en properties con su jsp.

                router = new AccionRouter("principal");

            } else {
                // Si no hay candidatos seleccionados, volvemos con mensaje de error
                errores.add("error-seleccionar-candidato");
                request.setAttribute("errores", errores);
                try {
                    router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizarconvocatorias),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(VisualizarEnviarSMSAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (InstantiationException ex) {
                    Logger.getLogger(VisualizarEnviarSMSAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IllegalAccessException ex) {
                    Logger.getLogger(VisualizarEnviarSMSAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        } else {
            router = new AccionRouter("inicio");
        }
        return router;
    }


}
